package modelo;

import java.io.Serializable;
import javax.persistence.*;

import modelo.Imovel;
import modelo.Perfil;

import java.util.Date;
import java.util.List;


/**
 * The persistent class for the usuario database table.
 * 
 */

@NamedQueries(
		{
			@NamedQuery(name="Usuario.emailSenhaValido",
					query="SELECT u FROM Usuario u WHERE u.email = :email and u.senha = :senha"),
			@NamedQuery(name="Usuario.pesquisaAvancada", 
					query="SELECT u FROM Usuario u, Perfil p where p.email = u.email and " +
							"(p.bebe = :bebe) and (p.fuma = :fuma)" +
							"and (u.cidade = :cidade or :cidade = '') and " +
							"(u.sexo like :sexo or :sexo like '')"),
			@NamedQuery(name="Usuario.cidades",
							query="SELECT distinct u.cidade FROM Usuario u")		
		}
)
@Entity
@Table(name="usuario")
public class Usuario implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	private String email;

	private String tipo;
	
	private String apelido;

	private String cep;

	private String cidade;

	@Temporal(TemporalType.DATE)
	@Column(name="data_nasc")
	private Date dataNasc;

	private String descricao;


	private String estado;

	@Column(name="fone_celular")
	private String foneCelular;

	@Column(name="fone_fixo")
	private String foneFixo;

	private String foto;

	private String nome;

	private String rua;

	private String senha;

	private String sexo;

	//bi-directional one-to-one association to Perfil
	@OneToOne(mappedBy="usuario")
	private Perfil perfil;

	//bi-directional many-to-one association to Imovel
	@OneToMany(mappedBy="usuario")
	private List<Imovel> imovels;

	public Usuario() {
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	
	public String getApelido() {
		return this.apelido;
	}

	public void setApelido(String apelido) {
		this.apelido = apelido;
	}

	public String getCep() {
		return this.cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	public String getCidade() {
		return this.cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public Date getDataNasc() {
		return this.dataNasc;
	}

	public void setDataNasc(Date dataNasc) {
		this.dataNasc = dataNasc;
	}

	public String getDescricao() {
		return this.descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getEstado() {
		return this.estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getFoneCelular() {
		return this.foneCelular;
	}

	public void setFoneCelular(String foneCelular) {
		this.foneCelular = foneCelular;
	}

	public String getFoneFixo() {
		return this.foneFixo;
	}

	public void setFoneFixo(String foneFixo) {
		this.foneFixo = foneFixo;
	}

	public String getFoto() {
		return this.foto;
	}

	public void setFoto(String foto) {
		this.foto = foto;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getRua() {
		return this.rua;
	}

	public void setRua(String rua) {
		this.rua = rua;
	}

	public String getSenha() {
		return this.senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getSexo() {
		return this.sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public Perfil getPerfil() {
		return this.perfil;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

	public List<Imovel> getImovels() {
		return this.imovels;
	}

	public void setImovels(List<Imovel> imovels) {
		this.imovels = imovels;
	}

	public Imovel addImovel(Imovel imovel) {
		getImovels().add(imovel);
		imovel.setUsuario(this);

		return imovel;
	}

	public Imovel removeImovel(Imovel imovel) {
		getImovels().remove(imovel);
		imovel.setUsuario(null);

		return imovel;
	}

}